home *** CD-ROM | disk | FTP | other *** search
/ PC World 2006 November / PCWorld_2006-11_cd.bin / v cisle / cinebench / cinebench_9.5.exe / CINEBENCH 9.5 / plugins / Bench.cof
Text File  |  2006-02-02  |  21KB  |  868 lines

  1. // CINEBENCH script, (C) MAXON Computer GmbH 2006
  2.  
  3. // set this variable to '1' if you want to run CINEBENCH in batch mode
  4. var AUTORUN = 0;
  5.  
  6. var version   = "V3.00";
  7. var PLUGIN_ID = 900323;
  8.  
  9. var c4d_shad_cb   = 0.0;    // sum for 3D Bench
  10. var ogl_soft_cb   = 0.0;    // sum for 3D Bench
  11. var ogl_hard_cb   = 0.0;    // sum for 3D Bench
  12. var render_1_cb   = 0.0;    // sum for RenderBench single
  13. var render_x_cb   = 0.0;    // sum for RenderBench MP
  14. var render_1_time = 0.0;
  15. var render_x_time = 0.0;
  16.  
  17. var dialog;
  18. var autoruntime = 0;
  19. var autostarted = 0;
  20.  
  21. var SHADING_FAC = 50;
  22.  
  23. var R_PANELVIEW = 59000;
  24.  
  25. // ************************ Renderbereich **********************
  26. PrepareRender(name)
  27. {
  28.     var d,start;
  29.  
  30.     LoadDocument(name);
  31.     d = GetActiveDocument();
  32.  
  33.     if (!d)
  34.     {
  35.         var text;
  36.     text = stradd("Error!\n",name->GetLastString(),"\nnot found");
  37.  
  38.         TextDialog(text);
  39.         return FALSE;
  40.     }
  41.  
  42.     var rd = d->GetFirstRenderData();
  43.     var bc = rd->GetContainer();
  44.  
  45.     //println("...prerendering");
  46.  
  47.     var xm = bc->GetData(RDATA_XRES);
  48.     var ym = bc->GetData(RDATA_YRES);
  49.     var shadow = bc->GetData(RDATA_SHADOW);
  50.  
  51.     bc->SetData(RDATA_XRES,20);
  52.     bc->SetData(RDATA_YRES,10);
  53.     bc->SetData(RDATA_SHADOW,0);
  54.     rd->SetContainer(bc);
  55.  
  56.     var nap = new(BaseBitmap,20,10);
  57.     d->Render(nap,FALSE);
  58.  
  59.     bc->SetData(RDATA_XRES,xm);
  60.     bc->SetData(RDATA_YRES,ym);
  61.     bc->SetData(RDATA_SHADOW,shadow);
  62.     rd->SetContainer(bc);
  63.  
  64.     return TRUE;
  65. }
  66.  
  67. DoRender(mp)
  68. {
  69.     var start;
  70.     var d  = GetActiveDocument();
  71.     var rd = d->GetFirstRenderData();
  72.     var bc = rd->GetContainer();
  73.  
  74.     bc->SetData(RDATA_SUPPRESSMP,mp);
  75.     rd->SetContainer(bc);
  76.  
  77.     var map = new(BaseBitmap,bc->GetData(RDATA_XRES),bc->GetData(RDATA_YRES));
  78.  
  79.     //println("...rendering scene");
  80.  
  81.     start = time();
  82.     d->Render(map,TRUE);
  83.  
  84.     return start;
  85. }
  86.  
  87. // ***********************  3D Bereich **********************
  88. ClearAll(doc)
  89. {
  90.     while (doc->GetFirstObject())
  91.     {
  92.         doc->GetFirstObject()->Remove();
  93.     }
  94.  
  95.     while (doc->GetFirstMaterial())
  96.     {
  97.         doc->GetFirstMaterial()->Remove();
  98.     }
  99. }
  100.  
  101.  
  102. MakeObject_1(doc,sub)
  103. {
  104.     // first delete all existing objects
  105.     ClearAll(doc);
  106.  
  107.     var op = new(FractalObject);
  108.     doc->InsertObject(op,NULL,NULL);
  109.  
  110.     var bc = op->GetContainer();
  111.     bc->SetData(PRIM_FRACTAL_LEN,vector(500.0,200.0,500.0));
  112.     bc->SetData(PRIM_FRACTAL_SUBW,sub);
  113.     bc->SetData(PRIM_FRACTAL_SUBH,sub);
  114.     op->SetContainer(bc);
  115.  
  116.     var tp = new(PhongTag);
  117. /*    var bc = tp->GetContainer();
  118.     bc->SetData(PHONGTAG_PHONG,1.5);
  119.     tp->SetContainer(bc);
  120. */    op->InsertTag(tp,NULL);
  121.  
  122.     return op;
  123. }
  124.  
  125. ShadeIt_1(sub,teststring)
  126. {
  127.     var t,j,i,t1,t2;
  128.     //var op = MakeObject_1(doc,sub);
  129.  
  130.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("shading"); file->AddLast("city3.c4d");
  131.  
  132.     LoadDocument(file);
  133.     var doc = GetActiveDocument();
  134.     if (!doc) return 0.0;
  135.     var fn = new(Filename);
  136.     fn->SetFullString(teststring + ": CityGen");
  137.     doc->SetFilename(fn);
  138.  
  139.     var op = doc->GetFirstObject();
  140.  
  141.     if (sub>1)
  142.     {
  143.         var data = new(BaseContainer,0);
  144.         data->SetData(MDATA_SUBDIVIDE_HYPER,FALSE);
  145.         data->SetData(MDATA_SUBDIVIDE_ANGLE,0.0);
  146.         data->SetData(MDATA_SUBDIVIDE_SPLINESUB,0);
  147.         data->SetData(MDATA_SUBDIVIDE_SUB,sub-1);
  148.  
  149.         SendModelingCommand(MCOMMAND_SUBDIVIDE,doc,op,data,MODIFY_POLYGONSELECTION);
  150.     }
  151.     var polys = op->GetPolygonCount();
  152.  
  153.     // primitiv caches aufbauen!!!
  154.     DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  155.  
  156.     var t = new(BaseTime);
  157.     var f1 = doc->GetMinTime()->GetFrame(doc->GetFps());
  158.     var f2 = doc->GetMaxTime()->GetFrame(doc->GetFps());
  159.  
  160.     var j,i,t1 = time();
  161.     for (j=0;j<SHADING_FAC;j++)
  162.     {
  163.         for(i=f1; i<f2; i++)
  164.         {
  165.             t->SetFrame(i,doc->GetFps());
  166.             doc->SetTime(t);
  167.             DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  168.         }
  169.         if (time()-t1>8000) { j++; break; }
  170.     }
  171.     var tt = (time()-t1)/j/1000.0;
  172.  
  173.     var polypersec = polys*(f2-f1)/tt;
  174.     var fps = (f2-f1)/tt;
  175.  
  176.     //println(tostring(tt,"0.2f")," sec; ",tostring(fps,".1f")," fps ");
  177.     //println(tostring(polypersec,".0f")," polygons/sec");
  178.  
  179.     KillDocument(doc);
  180.  
  181.     return tt;
  182. }
  183.  
  184. ShadeIt_2(name,cycles,teststring)
  185. {
  186.     var doc,f1,f2,t1,t2,t,i,j;
  187.  
  188.     LoadDocument(name);
  189.     doc = GetActiveDocument();
  190.     var fn = new(Filename);
  191.     fn->SetFullString(teststring + ": Pump Action");
  192.     doc->SetFilename(fn);
  193.  
  194.     // primitiv caches aufbauen!!!
  195.     DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  196.  
  197.     t = new(BaseTime);
  198.     f1 = doc->GetMinTime()->GetFrame(doc->GetFps());
  199.     f2 = doc->GetMaxTime()->GetFrame(doc->GetFps());
  200.  
  201.     t1 = time();
  202.     for (j=0;j<cycles;j++)
  203.     {
  204.         for(i=f1; i<f2; i++)
  205.         {
  206.             t->SetFrame(i,doc->GetFps());
  207.             doc->SetTime(t);
  208.             DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  209.         }
  210.  
  211.         if (time()-t1>8000) { j++; break; }
  212.         j++;
  213.  
  214.         for(i=f2; i>=f1; i--)
  215.         {
  216.             t->SetFrame(i,doc->GetFps());
  217.             doc->SetTime(t);
  218.             doc->AnimateDocument(0);
  219.  
  220.             DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  221.         }
  222.         if (time()-t1>8000) { j++; break; }
  223.     }
  224.     t2 = time();
  225.     var t = ((t2-t1)/j/1000.0);
  226.     var fps = (f2-f1)/t;
  227.     //println(tostring(t,"0.2f")," sec; ",tostring(fps,".1f")," fps");
  228.  
  229.     Sleep(400);
  230.  
  231.     KillDocument(doc);
  232.  
  233.     return (t2-t1)/j/1000.0;
  234. }
  235.  
  236. DoShade(teststring,type)
  237. {
  238.     var x1,x2,x3,x4,x5,x6,t1,t2,t3,t4,t5,t6;
  239.     var e1=0.0,e2=0.0,e3=0.0,e4=0.0;
  240.  
  241. gc();
  242.  
  243.     var doc=GetActiveDocument();
  244.  
  245.     KillDocument(doc);
  246.  
  247.     SetMousePointer(MOUSE_HIDE);
  248.  
  249.     x1 = 1;
  250.     x2 = 2;
  251.     x3 = 3;
  252.  
  253.     //println("Scene 1");
  254.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("flythrough"); file->AddLast("flythrough.c4d");
  255.     t2 = ShadeIt_2(file,SHADING_FAC,teststring);
  256.     if (t2!=0.0) e2 = 12502.0/t2;
  257.  
  258.     //println("Scene 2");
  259.     t1 = ShadeIt_1(x1,teststring);
  260.  
  261.     if (t1!=0.0) e1 = 3732.4/t1;
  262.  
  263.     SetMousePointer(MOUSE_SHOW);
  264.  
  265.     var res=(e1+e2)/2.0;
  266.  
  267.     // correction for R9.5
  268.     if (type==0)
  269.         res=res*1.04;
  270.     else
  271.         res=res*1.18;
  272.  
  273.     return res;
  274. }
  275.  
  276. // ************************ make a dialog class  ********************************************
  277.  
  278. enum
  279. {
  280.     B_COMPLETE  = 4000,
  281.     B_RENDER,
  282.     B_RENDER_M,
  283.     B_CINEMA,
  284.     B_OPENGL_SW,
  285.     B_OPENGL_HW,
  286.     B_CLIP1,
  287.     B_CLIP2,
  288.  
  289.     R_RENDER,
  290.     R_RENDER_M,
  291.     R_CINEMA,
  292.     R_OPENGL_SOFT,
  293.     R_OPENGL_HARD,
  294.  
  295.     R_GAIN_MP,
  296.     R_GAIN_OGLHW_OGLSW,
  297.  
  298.     R_RM1,
  299.     R_RM2,
  300.  
  301.     B_INFO_NAME,
  302.     B_INFO_MACH,
  303.     B_INFO_MHZ,
  304.     B_INFO_OS,
  305.     B_INFO_GFX,
  306.  
  307.     B_ABOUT0,
  308.     B_ABOUT1,
  309.     B_ABOUT2,
  310.     B_ABOUT3,
  311.     B_ABOUT4
  312. }
  313.  
  314. class MyDialog : GeDialog
  315. {
  316.     private:
  317.         var start,rendermode,multi;
  318.  
  319.     public:
  320.         MyDialog();
  321.  
  322.         CreateLayout();
  323.         Command(id,msg);
  324.         UpdateDialog();
  325.         Init();
  326.         CoreMessage(id,msg);
  327.         Timer(msg);
  328.  
  329.         BringToFront(managerid);
  330.  
  331.         AllTestsDone();
  332.  
  333.         Test1();
  334.         Test2();
  335.         Test_C4D_Shading();
  336.         Test_OGL_SW();
  337.         Test_OGL_HW();
  338.  
  339.         OptEnable();
  340.         StartAllTests();
  341. }
  342.  
  343. MyDialog::MyDialog()
  344. {
  345.     super(PLUGIN_ID);
  346.     rendermode = -1;
  347.     multi = FALSE;
  348. }
  349.  
  350. MyDialog::BringToFront(managerid)
  351. {
  352.     var msg = new(BaseContainer,'show');
  353.     msg->SetData('id',managerid);
  354.     SendCoreMessage(0xC0FFEE,msg,0);
  355. }
  356.  
  357. MyDialog::AllTestsDone()
  358. {
  359.     if (!AUTORUN) return;
  360.  
  361.     var t;
  362.     var le;
  363.  
  364.     le = GeGetLineEnd();
  365.  
  366.     t =  "CINEBENCH 9.5"+le;
  367.     t += "Rendering (Single   CPU)           : "; if (render_1_cb!=0.0) t += tostring(render_1_cb,".0f"); else t += "---"; t += " CB-CPU"; if (render_1_time!=0.0) t += ", "+tostring(render_1_time,".1f")+" sec"; t += le;
  368.     t += "Rendering (Multiple CPU)           : "; if (render_x_cb!=0.0) t += tostring(render_x_cb,".0f"); else t += "---"; t += " CB-CPU"; if (render_x_time!=0.0) t += ", "+tostring(render_x_time,".1f")+" sec"; t += le;
  369.     t += "Shading (CINEMA 4D)                : "; if (c4d_shad_cb!=0.0) t += tostring(c4d_shad_cb,".0f"); else t += "---"; t += " CB-GFX"+le;
  370.     t += "Shading (OpenGL Software Lighting) : "; if (ogl_soft_cb!=0.0) t += tostring(ogl_soft_cb,".0f"); else t += "---"; t += " CB-GFX"+le;
  371.     t += "Shading (OpenGL Hardware Lighting) : "; if (ogl_hard_cb!=0.0) t += tostring(ogl_hard_cb,".0f"); else t += "---"; t += " CB-GFX"+le;
  372.     t += le;
  373.  
  374.     SetClipboardData(t);
  375.  
  376.     println("AUTORUN complete\n");
  377.  
  378.     Sleep(2);
  379.  
  380.     shutdown();
  381. }
  382.  
  383. MyDialog::CoreMessage(id,msg)
  384. {
  385.     if (id==-1003 && rendermode!=100)
  386.     {
  387.         var diff = msg->GetData(BFM_CORE_PAR2);
  388.         if (diff==-1)
  389.         {
  390.             println("Rendering aborted\n");
  391.         }
  392.         else
  393.         {
  394.             if (rendermode==0)
  395.             {
  396.                 render_1_time = diff/1000.0;
  397.                 if (diff!=0.0) render_1_cb = 1.0 / render_1_time * 26320.0 * 0.85; // 85% correction for R9.5
  398.                 if (!(GetCPUCount()>1 && multi))
  399.                 {
  400.                     BringToFront(PLUGIN_ID);
  401.                     AllTestsDone();
  402.                 }
  403.                 //println(tostring(render_1_time,".1f")," sec");
  404.             }
  405.             else if (rendermode==1)
  406.             {
  407.                 render_x_time = diff/1000.0;
  408.                 if (diff!=0.0) render_x_cb = 1.0 / render_x_time * 26320.0 * 0.85; // 85% correction for R9.5
  409.                 multi=FALSE;
  410.                 BringToFront(PLUGIN_ID);
  411.                 //println(tostring(render_x_time,".1f")," sec");
  412.                 AllTestsDone();
  413.             }
  414.         }
  415.         var d = GetActiveDocument();
  416.         KillDocument(d);
  417.  
  418.         rendermode = -1;
  419.         Init();
  420.         println(" ");
  421.     }
  422. }
  423.  
  424.  
  425. MyDialog::CreateLayout()
  426. {
  427.     SetTitle("CINEBENCH 9.5");
  428.     SetTimer(1000);
  429.  
  430.     if (AUTORUN)
  431.     {
  432.         autoruntime = time();
  433.         println("CINEBENCH AUTORUN\nPlease wait until all tests are done!\n");
  434.     }
  435.  
  436.     AddGroupBeginV(1000,BFH_FIT,1,"",0);
  437.         AddGroupBorderSpace(4,4,4,4);
  438.  
  439.         AddGroupSpace(8,8);
  440.  
  441.         AddGroupBeginV(1000,BFH_FIT,2,"Info",0);
  442.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  443.             AddGroupBorderSpace(4,4,4,4);
  444.             AddGroupSpace(2,1);
  445.  
  446.             AddStaticText(1000,BFH_LEFT,0,0,"Machine",0);
  447.             AddEditText(B_INFO_MACH,BFH_SCALEFIT,0,11);
  448.  
  449.             AddStaticText(1000,BFH_LEFT,0,0,"MHz (real freq.)",0);
  450.             AddEditText(B_INFO_MHZ,BFH_SCALEFIT,0,11);
  451.  
  452.             AddStaticText(1000,BFH_LEFT,0,0,"OS",0);
  453.             AddEditText(B_INFO_OS,BFH_SCALEFIT,0,11);
  454.  
  455.             AddStaticText(1000,BFH_LEFT,0,0,"GFX-Board",0);
  456.             AddEditText(B_INFO_GFX,BFH_SCALEFIT,0,11);
  457.  
  458.             AddStaticText(1000,BFH_LEFT,0,0,"Tester",0);
  459.             AddEditText(B_INFO_NAME,BFH_SCALEFIT,0,11);
  460.  
  461.         AddGroupEnd();
  462.  
  463.         AddGroupBeginV(1000,BFH_FIT,1,"Main",0);
  464.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  465.             AddGroupBorderSpace(4,4,4,4);
  466.  
  467.             AddButton(B_COMPLETE,BFH_FIT,0,0,"Start all tests");
  468.             AddButton(B_CLIP1,BFH_FIT,0,0,"-> To Clipboard");
  469.             AddButton(B_CLIP2,BFH_FIT,0,0,"-> To Database");
  470.         AddGroupEnd();
  471.  
  472.         AddGroupBeginV(1000,BFH_FIT,2,"CPU Benchmark",0);
  473.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  474.             AddGroupBorderSpace(4,4,4,4);
  475.  
  476.             AddButton(B_RENDER,BFH_FIT,0,0,"Rendering (1 CPU)");
  477.             AddStaticText(R_RENDER,BFH_LEFT,100,0,"---",0);
  478.  
  479.             AddButton(B_RENDER_M,BFH_FIT,0,0,"Rendering (x CPU)");
  480.             AddStaticText(R_RENDER_M,BFH_LEFT,100,0,"---",0);
  481.  
  482.             AddStaticText(R_RM2,BFH_LEFT,0,0,"Multiprocessor Speedup:",0);
  483.             AddStaticText(R_GAIN_MP ,BFH_LEFT,60,0,"---",0);
  484.     //        AddButton(B_ABOUT4,BFH_LEFT,0,0,"Readme");
  485.         AddGroupEnd();
  486.  
  487.         AddGroupBeginV(1000,BFH_SCALEFIT,2,"Graphics Benchmark",0);
  488.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  489.             AddGroupBorderSpace(4,4,4,4);
  490.  
  491.             AddButton(B_CINEMA,BFH_FIT,0,0,"C4D Shading");
  492.             AddStaticText(R_CINEMA,BFH_SCALEFIT,100,0,"-o-",0);
  493.     //        AddStaticText(1000,BFH_LEFT,20,0,"",0);
  494.     //        AddStaticText(1000,BFH_LEFT,20,0,"",0);
  495.     //        AddButton(B_ABOUT1,BFH_LEFT,0,0,"Readme");
  496.  
  497.             AddButton(B_OPENGL_SW,BFH_FIT,0,0,"OpenGL SW-L");
  498.             AddStaticText(R_OPENGL_SOFT,BFH_SCALEFIT,100,0,"---",0);
  499.  
  500.             AddButton(B_OPENGL_HW,BFH_FIT,0,0,"OpenGL HW-L");
  501.             AddStaticText(R_OPENGL_HARD,BFH_SCALEFIT,100,0,"---",0);
  502.  
  503.             AddStaticText(1000,BFH_LEFT,0,0,"OpenGL Speedup:",0);
  504.             AddStaticText(R_GAIN_OGLHW_OGLSW,BFH_SCALEFIT,60,0,"---",0);
  505.         AddGroupEnd();
  506.  
  507.         AddGroupBeginV(1000,BFH_CENTER,1,"",0);
  508.             AddGroupBorderSpace(4,4,4,4);
  509.             AddStaticText(1000,BFH_CENTER,0,0,"CINEBENCH is based",0);
  510.             AddStaticText(1000,BFH_CENTER,0,0,"on the high performance",0);
  511.             AddStaticText(1000,BFH_CENTER,0,0,"3D software CINEMA 4D.",0);
  512.             AddStaticText(1000,BFH_CENTER,0,0,"More info at www.maxon.net",0);
  513.         AddGroupEnd();
  514.     AddGroupEnd();
  515.  
  516.     return TRUE;
  517. }
  518.  
  519. MyDialog::Test1()
  520. {
  521.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("daylight"); file->AddLast("daylight.c4d");
  522.  
  523.     println("Single CPU Render Test");
  524.  
  525.     rendermode = 100;
  526.     Init();
  527.     PrepareRender(file);
  528.     rendermode = 0;
  529.     OptEnable();
  530.     start = DoRender(TRUE);
  531. }
  532.  
  533. MyDialog::Test2()
  534. {
  535.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("daylight"); file->AddLast("daylight.c4d");
  536.  
  537.     if (GetCPUCount()>1)
  538.     {
  539.         println("Multiple CPU Render Test");
  540.         rendermode = 100;
  541.         Init();
  542.         PrepareRender(file);
  543.         rendermode = 1;
  544.         OptEnable();
  545.         start = DoRender(FALSE);
  546.     }
  547.     else
  548.         rendermode = -1;
  549. }
  550.  
  551. MyDialog::Test_C4D_Shading()
  552. {
  553.     rendermode = 10;
  554.     Init();
  555.  
  556.     println("CINEMA 4D Shading Test");
  557.  
  558.     SetOpenGL(0);
  559.     c4d_shad_cb = DoShade("CINEMA 4D Shading Test",0);
  560.  
  561.     rendermode = -1;
  562.     Init();
  563.     println(" ");
  564. }
  565.  
  566. MyDialog::Test_OGL_SW()
  567. {
  568.     rendermode = 10;
  569.     Init();
  570.  
  571.     println("OpenGL Software Lighting Test");
  572.     SetOpenGL(1);
  573.     ogl_soft_cb = DoShade("OpenGL Software Lighting Test",1);
  574.  
  575.     rendermode = -1;
  576.     Init();
  577.     println(" ");
  578. }
  579.  
  580. MyDialog::Test_OGL_HW()
  581. {
  582.     rendermode = 10;
  583.     Init();
  584.  
  585.     println("OpenGL Hardware Lighting Test");
  586.     SetOpenGL(2);
  587.     ogl_hard_cb = DoShade("OpenGL Hardware Lighting Test",2);
  588.  
  589.     rendermode = -1;
  590.     Init();
  591.     println(" ");
  592. }
  593.  
  594. MyDialog::StartAllTests()
  595. {
  596.     BringToFront(R_PANELVIEW);
  597.     Test_OGL_HW();
  598.     Test_OGL_SW();
  599.     Test_C4D_Shading();
  600.     multi=GetCPUCount()>1;
  601.     Test1();
  602. }
  603.  
  604. MyDialog::Command(id,msg)
  605. {
  606.     switch (id)
  607.     {
  608.         case B_ABOUT0:
  609.         {
  610.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about0.pdf");
  611.             GeExecuteFile(file);
  612.         }
  613.         break;
  614.  
  615.         case B_ABOUT1:
  616.         {
  617.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about1.pdf");
  618.             GeExecuteFile(file);
  619.         }
  620.         break;
  621.  
  622.         case B_ABOUT2:
  623.         {
  624.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about2.pdf");
  625.             GeExecuteFile(file);
  626.         }
  627.         break;
  628.  
  629.         case B_ABOUT3:
  630.         {
  631.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about3.pdf");
  632.             GeExecuteFile(file);
  633.         }
  634.         break;
  635.  
  636.         case B_ABOUT4:
  637.         {
  638.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about4.pdf");
  639.             GeExecuteFile(file);
  640.         }
  641.         break;
  642.  
  643.  
  644.         case B_RENDER:           Test1(); break;
  645.         case B_RENDER_M:         Test2(); break;
  646.         case B_CINEMA:           BringToFront(R_PANELVIEW); Test_C4D_Shading(); BringToFront(PLUGIN_ID); break;
  647.         case B_OPENGL_SW:   BringToFront(R_PANELVIEW); Test_OGL_SW(); BringToFront(PLUGIN_ID); break;
  648.         case B_OPENGL_HW:   BringToFront(R_PANELVIEW); Test_OGL_HW(); BringToFront(PLUGIN_ID); break;
  649.  
  650.         case B_COMPLETE:
  651.             StartAllTests();
  652.             break;
  653.  
  654.         case B_CLIP1:
  655.         case B_CLIP2:
  656.         {
  657.             var t;
  658.             var le;
  659.  
  660.             le = GeGetLineEnd();
  661.  
  662.             t =  "CINEBENCH 9.5"+le;
  663.             t += "****************************************************"+le+le;
  664.             t += "Tester           : " + GetString(B_INFO_NAME)+le+le;
  665.             t += "Processor        : " + GetString(B_INFO_MACH)+le;
  666.             t += "MHz              : " + GetString(B_INFO_MHZ)+le;
  667.             t += "Number of CPUs   : " + tostring(GetCPUCount()) +le;
  668.             t += "Operating System : " + GetString(B_INFO_OS)+le;
  669.             t += le;
  670.             t += "Graphics Card    : " + GetString(B_INFO_GFX)+le;
  671.             t += "Resolution       : <fill this out>"+le;
  672.             t += "Color Depth      : <fill this out>"+le+le;
  673.             t += "****************************************************"+le+le;
  674.             t += "Rendering (Single   CPU): "; if (render_1_cb !=0.0) t += tostring( render_1_cb,".0f"); else t += "---"; t += " CB-CPU "+le;
  675.             t += "Rendering (Multiple CPU): "; if (render_x_cb!=0.0) t += tostring(render_x_cb,".0f"); else t += "---"; t += " CB-CPU "+le;
  676.             t += le;
  677.             if (render_1_cb!=0.0 && render_x_cb!=0.0)
  678.                 t += "Multiprocessor Speedup: "+tostring(render_x_cb/render_1_cb,".2f")+le;
  679.             t += le;
  680.  
  681.             t += "Shading (CINEMA 4D)                : "; if (c4d_shad_cb!=0.0) t += tostring(c4d_shad_cb,".0f"); else t += "---"; t += " CB-GFX "+le;
  682.             t += "Shading (OpenGL Software Lighting) : "; if (ogl_soft_cb!=0.0) t += tostring(ogl_soft_cb,".0f"); else t += "---"; t += " CB-GFX "+le;
  683.             t += "Shading (OpenGL Hardware Lighting) : "; if (ogl_hard_cb!=0.0) t += tostring(ogl_hard_cb,".0f"); else t += "---"; t += " CB-GFX "+le;
  684.             t += le;
  685.  
  686.             var a,b,s;
  687.             a = c4d_shad_cb;
  688.             b = ogl_soft_cb; if (ogl_hard_cb>b) b=ogl_hard_cb;
  689.             if (a!=0.0 && b!=0.0)
  690.             {
  691.                 t += "OpenGL Speedup: " + tostring(b/a,".2f")+le;
  692.             }
  693.  
  694.             t += le + "****************************************************"+le;
  695.  
  696.             if (id == B_CLIP2)
  697.             {
  698.                 // send data to CINEBENCH database plugin
  699.                 var b = new(BaseContainer,0);
  700.                 b->SetData(0,t);
  701.                 SendPluginMessage(b,200000020);
  702.             }
  703.             else
  704.             {
  705.                 SetClipboardData(t);
  706.             }
  707.         }
  708.         break;
  709.     }
  710. }
  711.  
  712.  
  713.  
  714.  
  715. var splashbitmap = 0;
  716.  
  717. MyDialog::Timer(msg)
  718. {
  719.     if (!splashbitmap)
  720.     {
  721.         splashbitmap = TRUE;
  722.     }
  723.     if (multi && rendermode==-1)
  724.     {
  725.         multi=FALSE;
  726.         Test2();
  727.     }
  728.     if (AUTORUN && !autostarted)
  729.     {
  730.         if (time()>autoruntime+3000)
  731.         {
  732.             autostarted = TRUE;
  733.             StartAllTests();
  734.         }
  735.         return;
  736.     }
  737. }
  738.  
  739. MyDialog::OptEnable()
  740. {
  741.     Enable(B_RENDER_M,!AUTORUN && GetCPUCount()>1 && rendermode==-1);
  742.     Enable(R_RENDER_M,!AUTORUN && GetCPUCount()>1);
  743.     Enable(R_RM1     ,!AUTORUN && GetCPUCount()>1);
  744.     Enable(R_RM2     ,!AUTORUN && GetCPUCount()>1);
  745.     Enable(R_GAIN_MP ,!AUTORUN && GetCPUCount()>1);
  746.  
  747.     Enable(B_RENDER,!AUTORUN && rendermode==-1);
  748.     Enable(B_CINEMA,!AUTORUN && rendermode==-1);
  749.     Enable(B_OPENGL_SW,!AUTORUN && rendermode==-1);
  750.     Enable(B_OPENGL_HW,!AUTORUN && rendermode==-1);
  751.     Enable(B_CLIP1,!AUTORUN && rendermode==-1);
  752.     Enable(B_CLIP2,!AUTORUN && rendermode==-1);
  753.  
  754.     Enable(B_COMPLETE,!AUTORUN && rendermode==-1);
  755. }
  756.  
  757. var showsplash;
  758.  
  759. MyDialog::Init()
  760. {
  761.     if (!showsplash)
  762.     {
  763.         var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("cb.jpg");
  764.         ShowBitmap(file);
  765.         showsplash = TRUE;
  766.     }
  767.  
  768.     OptEnable();
  769.  
  770.     if (render_1_cb!=0.0)
  771.     {
  772.         var txt = stradd(tostring(render_1_cb,".0f")," CB-CPU");
  773.         SetString(R_RENDER,txt);
  774.     }
  775.     else
  776.         SetString(R_RENDER,"---");
  777.  
  778.     if (render_x_cb!=0.0)
  779.     {
  780.         var txt = stradd(tostring(render_x_cb,".0f")," CB-CPU");
  781.         SetString(R_RENDER_M,txt);
  782.     }
  783.     else
  784.         SetString(R_RENDER_M,"---");
  785.  
  786.     if (c4d_shad_cb!=0.0)
  787.     {
  788.         var txt = stradd(tostring(c4d_shad_cb,".0f")," CB-GFX");
  789.         SetString(R_CINEMA,txt);
  790.     }
  791.     else
  792.         SetString(R_CINEMA,"---");
  793.  
  794.     if (ogl_soft_cb!=0.0)
  795.     {
  796.         var txt = stradd(tostring(ogl_soft_cb,".0f")," CB-GFX");
  797.         SetString(R_OPENGL_SOFT,txt);
  798.     }
  799.     else
  800.         SetString(R_OPENGL_SOFT,"---");
  801.  
  802.     if (ogl_hard_cb!=0.0)
  803.     {
  804.         var txt = stradd(tostring(ogl_hard_cb,".0f")," CB-GFX");
  805.         SetString(R_OPENGL_HARD,txt);
  806.     }
  807.     else
  808.         SetString(R_OPENGL_HARD,"---");
  809.  
  810.  
  811.     if (render_x_cb!=0.0 && render_1_cb!=0.0)
  812.     {
  813.         var txt = stradd(tostring(render_x_cb/render_1_cb,".2f")," x");
  814.         SetString(R_GAIN_MP,txt);
  815.     }
  816.     else
  817.         SetString(R_GAIN_MP,"---");
  818.  
  819.     var mmax=ogl_hard_cb;
  820.     if (ogl_soft_cb>ogl_hard_cb) mmax=ogl_soft_cb;
  821.  
  822.     SetString(R_GAIN_OGLHW_OGLSW,(c4d_shad_cb!=0.0 && mmax!=0.0) ? stradd(tostring(mmax/c4d_shad_cb,".2f")," x") : "---");
  823. }
  824.  
  825. // ************************************************************************
  826.  
  827. class MyMenuPlugin : MenuPlugin
  828. {
  829.     public:
  830.         MyMenuPlugin();
  831.  
  832.         GetID();
  833.         GetName();
  834.         GetHelp();
  835.         Execute(doc);
  836.         RestoreLayout(secret);
  837. }
  838.  
  839. MyMenuPlugin::MyMenuPlugin() { super(); }
  840. MyMenuPlugin::GetID()        { return PLUGIN_ID; }
  841. MyMenuPlugin::GetName()      { return "CINEBENCH"; }
  842. MyMenuPlugin::GetHelp()      { return "CINEBENCH"; }
  843.  
  844. MyMenuPlugin::Execute(doc)
  845. {
  846.     if (!dialog) dialog = new(MyDialog);
  847.     dialog->Open(TRUE,-1,-1);
  848. }
  849.  
  850. MyMenuPlugin::RestoreLayout(secret)
  851. {
  852.     if (!dialog) dialog = new(MyDialog);
  853.     dialog->RestoreLayout(secret);
  854. }
  855.  
  856. // ************************************************************************
  857.  
  858. main()
  859. {
  860.     c4d_shad_cb = 0.0;
  861.     ogl_soft_cb = 0.0;
  862.     ogl_hard_cb = 0.0;
  863.     render_1_cb  = 0.0;
  864.     render_x_cb = 0.0;
  865.  
  866.     Register(MyMenuPlugin);
  867. }
  868.